package ACWing.SearchAndGraphTheory.二分图;
//匈牙利算法 861. 二分图的最大匹配

import java.util.Arrays;
import java.util.Scanner;

/**
 * @author :chenjie
 * @date :Created 2023/1/2 15:34
 */
public class Hungary {
    static int N=510,M=100010;
    static int[]e=new int[M];
    static int[]ne=new int[M];
    static int[]h=new int[N];
    static int n,m,idx;
    static int[]match=new int[N];//记录右半边所匹配的点的位置
    static boolean[]st=new boolean[N];//防止多条匹配
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n1=sc.nextInt();
        n=sc.nextInt();
        m=sc.nextInt();
        Arrays.fill(h,-1);
        for (int i = 0; i < m; i++) {
            int a=sc.nextInt();
            int b=sc.nextInt();
            add(a,b);
        }
        int res=0;
        for (int i = 1; i <= n1; i++) {//遍历每个节点去判断是否可以匹配可以就加一不可以就跳过
            Arrays.fill(st,false);
            if(find(i)){//本节点可以匹配就可以加一
                res++;
            }
        }
        System.out.println(res);

    }
    public static void add(int a,int b){
        e[idx]=b;
        ne[idx]=h[a];
        h[a]=idx++;
    }
    public static boolean find(int x){
        for (int i = h[x]; i !=-1; i=ne[i]) {
            int j=e[i];
            if(!st[j]){
                st[j]=true;
                if(match[j]==0||find(match[j])){//如果这个点未被匹配或者匹配者可以有其他没有访问的点了可以访问就对这个点的匹配对象进行修改
                    match[j]=x;
                    return true;
                }
            }
        }
        return false;
    }
}
